package com.zsrt.java.day20161227.hb.demo05;

import java.util.Scanner;

import org.junit.Test;

public class Demo05 {
	
	@Test
	
	/**
	 * 实现牛牛游戏
	 * 分析：1.获取每个人的手牌
	 *      2.将闲家的手牌与庄家进行大小比较
	 */
	public void test(){
		
		String[] shoupai=new String[]{"红桃","红桃","红桃C","红桃Aww","红桃C"};
		panduanzhadan(shoupai);
		
	}
	
	public void niuniugame(){
		
		//构造一副牌
		String[] pai=new String[]{"红桃A","红桃2","红桃3","红桃4","红桃5","红桃6","红桃7","红桃8","红桃9","红桃10","红桃J","红桃Q","红桃K","黑桃A","黑桃2","黑桃3","黑桃4","黑桃5","黑桃6","黑桃7","黑桃8","黑桃9","黑桃10","黑桃J","黑桃Q","黑桃K","梅花A","梅花2","梅花3","梅花4","梅花5","梅花6","梅花7","梅花8","梅花9","梅花10","梅花J","梅花Q","梅花K","方片A","方片2","方片3","方片4","方片5","方片6","方片7","方片8","方片9","方片10","方片J","方片Q","方片K"};
		//输入玩家数量
		Scanner sc=new Scanner(System.in);
		System.out.println("请输入玩家数(2~6人)：");
		int x=sc.nextInt();
		sc.close();
		//根据人数生成一个玩家编号数组，编号顺序为：1 ，2, 3...
		int wj[];
		wj=new int[x];
		for(int index=0;index<x;index++){
			
			wj[index]=index+1;
			
		}
		System.out.println("开始游戏");
		//根据玩家人数生成每个玩家手牌的动态数组并分配空间（手牌为5，所以分配5个空间）
		String pai01[];
		pai01=new String[5];
		String pai02[];
		pai02=new String[5];
		String pai03[];
		pai03=new String[5];
		String pai04[];
		pai04=new String[5];
		String pai05[];
		pai05=new String[5];
		String pai06[];
		pai06=new String[5];
		//人数为2的情况
		if(x==2){
			//输出1号玩家的手牌
			System.out.println("1号玩家的手牌为：");
			for(int i=0;i<5;i++){
				
				int index=(int)Math.floor(Math.random()*pai.length);
				pai01[i]=pai[index];
				pai=del(pai,pai[index]);
				System.out.print(pai01[i]+"\t");
				 
			}
			System.out.println();
			//输出2号玩家的手牌
			System.out.println("2号玩家的手牌为：");
			for(int i=0;i<5;i++){
				
				int index=(int)Math.floor(Math.random()*pai.length);
				pai02[i]=pai[index];
				pai=del(pai,pai[index]);
				System.out.print(pai02[i]+"\t");
				
			}
		//人数为3的情况	 
		}else if(x==3){
			
			//输出1号玩家的手牌
			System.out.println("1号玩家的手牌为：");
			for(int i=0;i<5;i++){
				
				int index=(int)Math.floor(Math.random()*pai.length);
				pai01[i]=pai[index];
				pai=del(pai,pai[index]);
				System.out.print(pai01[i]+"\t");
				
			}
			System.out.println();
			//输出2号玩家的手牌
			System.out.println("2号玩家的手牌为：");
			for(int i=0;i<5;i++){
				
				int index=(int)Math.floor(Math.random()*pai.length);
				pai02[i]=pai[index];
				pai=del(pai,pai[index]);
				System.out.print(pai02[i]+"\t");
				
			}
			System.out.println();
			//输出3号玩家的手牌
			System.out.println("3号玩家的手牌为：");
			for(int i=0;i<5;i++){
				
				int index=(int)Math.floor(Math.random()*pai.length);
				pai03[i]=pai[index];
				pai=del(pai,pai[index]);
				System.out.print(pai03[i]+"\t");
				
			}
		//人数为4的情况	
		}else if(x==4){
			
			//输出1号玩家的手牌
			System.out.println("1号玩家的手牌为：");
			for(int i=0;i<5;i++){
				
				int index=(int)Math.floor(Math.random()*pai.length);
				pai01[i]=pai[index];
				pai=del(pai,pai[index]);
				System.out.print(pai01[i]+"\t");
				
			}
			System.out.println();
			//输出2号玩家的手牌
			System.out.println("2号玩家的手牌为：");
			for(int i=0;i<5;i++){
				
				int index=(int)Math.floor(Math.random()*pai.length);
				pai02[i]=pai[index];
				pai=del(pai,pai[index]);
				System.out.print(pai02[i]+"\t");
				
			}
			System.out.println();
			//输出3号玩家的手牌
			System.out.println("3号玩家的手牌为：");
			for(int i=0;i<5;i++){
				
				int index=(int)Math.floor(Math.random()*pai.length);
				pai03[i]=pai[index];
				pai=del(pai,pai[index]);
				System.out.print(pai03[i]+"\t");
				
			}
			System.out.println();
			//输出4号玩家的手牌
			System.out.println("4号玩家的手牌为：");
			for(int i=0;i<5;i++){
				
				int index=(int)Math.floor(Math.random()*pai.length);
				pai04[i]=pai[index];
				pai=del(pai,pai[index]);
				System.out.print(pai04[i]+"\t");
				
			}
			
		//人数为5的情况	
		}else if(x==5){
			
			//输出1号玩家的手牌
			System.out.println("1号玩家的手牌为：");
			for(int i=0;i<5;i++){
				
				int index=(int)Math.floor(Math.random()*pai.length);
				pai01[i]=pai[index];
				pai=del(pai,pai[index]);
				System.out.print(pai01[i]+"\t");
				
			}
			System.out.println();
			//输出2号玩家的手牌
			System.out.println("2号玩家的手牌为：");
			for(int i=0;i<5;i++){
				
				int index=(int)Math.floor(Math.random()*pai.length);
				pai02[i]=pai[index];
				pai=del(pai,pai[index]);
				System.out.print(pai02[i]+"\t");
				
			}
			System.out.println();
			//输出3号玩家的手牌
			System.out.println("3号玩家的手牌为：");
			for(int i=0;i<5;i++){
				
				int index=(int)Math.floor(Math.random()*pai.length);
				pai03[i]=pai[index];
				pai=del(pai,pai[index]);
				System.out.print(pai03[i]+"\t");
				
			}
			System.out.println();
			//输出4号玩家的手牌
			System.out.println("4号玩家的手牌为：");
			for(int i=0;i<5;i++){
				
				int index=(int)Math.floor(Math.random()*pai.length);
				pai04[i]=pai[index];
				pai=del(pai,pai[index]);
				System.out.print(pai04[i]+"\t");
				
			}
			System.out.println();
			//输出5号玩家的手牌
			System.out.println("5号玩家的手牌为：");
			for(int i=0;i<5;i++){
				
				int index=(int)Math.floor(Math.random()*pai.length);
				pai05[i]=pai[index];
				pai=del(pai,pai[index]);
				System.out.print(pai05[i]+"\t");
				
			}
			 
		//人数为6的情况
		}else if(x==6){
			
			//输出1号玩家的手牌
			System.out.println("1号玩家的手牌为：");
			for(int i=0;i<5;i++){
				
				int index=(int)Math.floor(Math.random()*pai.length);
				pai01[i]=pai[index];
				pai=del(pai,pai[index]);
				System.out.print(pai01[i]+"\t");
				
			}
			System.out.println();
			//输出2号玩家的手牌
			System.out.println("2号玩家的手牌为：");
			for(int i=0;i<5;i++){
				
				int index=(int)Math.floor(Math.random()*pai.length);
				pai02[i]=pai[index];
				pai=del(pai,pai[index]);
				System.out.print(pai02[i]+"\t");
				
			}
			System.out.println();
			//输出3号玩家的手牌
			System.out.println("3号玩家的手牌为：");
			for(int i=0;i<5;i++){
				
				int index=(int)Math.floor(Math.random()*pai.length);
				pai03[i]=pai[index];
				pai=del(pai,pai[index]);
				System.out.print(pai03[i]+"\t");
				
			}
			System.out.println();
			//输出4号玩家的手牌
			System.out.println("4号玩家的手牌为：");
			for(int i=0;i<5;i++){
				
				int index=(int)Math.floor(Math.random()*pai.length);
				pai04[i]=pai[index];
				pai=del(pai,pai[index]);
				System.out.print(pai04[i]+"\t");
				
			}
			System.out.println();
			//输出5号玩家的手牌
			System.out.println("5号玩家的手牌为：");
			for(int i=0;i<5;i++){
				
				int index=(int)Math.floor(Math.random()*pai.length);
				pai05[i]=pai[index];
				pai=del(pai,pai[index]);
				System.out.print(pai05[i]+"\t");
				
			}
			System.out.println();
			//输出6号玩家的手牌
			System.out.println("6号玩家的手牌为：");
			for(int i=0;i<5;i++){
				
				int index=(int)Math.floor(Math.random()*pai.length);
				pai06[i]=pai[index];
				pai=del(pai,pai[index]);
				System.out.print(pai06[i]+"\t");
				
			}
		}else{
			
			System.out.println("输入人数不在范围内！");
		}
		
	}
	 
	
	/**
	 * 构造一个删除String类型数组元素的方法，返回值为一个删除之后的新数组
	 * 参数有：被改数组和被改元素
	 */
	
	public static String[] del(String[] oldarray,String del){
		
		String newarray[];
		newarray=new String[oldarray.length-1];
		int xb=0;
		for(int index01=0;index01<oldarray.length;index01++){
			
			if(oldarray[index01]==del){
				
				xb=index01;
				break;
				
			}
		}
		for(int index02=0;index02<xb;index02++){
			
			newarray[index02]=oldarray[index02];
			
		}
		for(int index03=xb;index03<oldarray.length-1;index03++){
			
			newarray[index03]=oldarray[index03+1];
			
		}
		return newarray;
		 
	}
	
	/**
	 * 牛牛牌型有：
	 *  1.炸弹：5张牌有4张一样的牌
	 *  2.五小：5张牌都小于5，并且全部加起来小于10
	 *  3.五花：5张牌全为花（如Q，J，J，Q，K）
	 *  4.四花：5张牌中一张为10，另外4张为花（如10，J，J，Q，K）
	 *  5.牛牛：5张牌中的任意3张加起来为10的倍数，且另外2张也为10的倍数（如5，6，9，10，J）
	 *  6.有牛：5张牌中的任意3张加起来为10的倍数，但另外2张不为10的倍数（如5，6，7，9，J），至于到底是牛几，就要看另外2张牌相加之后的个位数
	 *  7.没牛：5张牌中的任意3张加起来不能成为10的倍数（如5，6，8，10，J）
	 * 大小顺序：1>2>3>4>5>6>7
	 * 
	 * 分析：可以构造一个判断一个玩家手牌牌型的方法 该方法中又包括上述7种牌型的判断方法
	 *      
	 *      如果牌型相同，再构造一个比较相同牌型大小的方法
	 *      1.同为炸弹：看炸弹牌的大小
	 *      2.同为五小：比点数+单张+花色大小
	 *      3.同为五花：比单张+花色大小
	 *      4.同为四花：比单张+花色大小
	 *      5.同为牛牛：比单张+花色大小
	 *      6.同为有牛：比分数大小，牛九 > 牛八 > 牛七 > 牛六 > 牛五 > 牛四 > 牛三 > 牛二 > 牛一
	 *      7.同为无牛：比单张大小
	 *      
	 *      花色大小顺序：黑桃 > 红桃 > 草花 > 方块
	 *      单张大小顺序：K > Q > J > 10 > 9 > 8 > 7 > 6 > 5 > 4 > 3 > 2 > A
	 *      
	 */
	/**
	 * 构造一个判断手牌牌型是否为炸弹的方法
	 */
	public static void panduanzhadan(String[] array){
		
		String newarray[];
		newarray=new String[array.length-1];
		int inner=0;
		for(int outer=0;outer<array.length;outer++){
			
			newarray=del(array,array[outer]);
			while(inner<newarray.length-1&&newarray[inner]==newarray[inner+1]){
				
				inner++;
				
			}
			if(inner==newarray.length-1){
				
				System.out.println("手牌为炸弹");
				break;
				
			}
			 
		}
		 
	}
	
}
